#ifndef __ISIMULATION_H_INCLUDE__
#define __ISIMULATION_H_INCLUDE__

#include <irrlicht.h>
#include <list>

#include "Agent.h"
#include "Graph_SearchAStar.h"
#include "Heuristic_Euclid.h"
#include "IPathPlanner.h"
#include "Receiver.h"

using namespace irr;
using namespace video;
using namespace scene;


class ISimulation
{
public:
	ISimulation(char* worldIrrFilePath);
	~ISimulation();
	
	virtual void runSimulation();
protected:
	void loadWorld();
	void initializeAssets();
	void initializeCamera();
	void initializePathfinder();
	void printDebugging();
	void UpdateCamera();
	void CreateObjects();
	void Restart();
	void Draw_Path();
	void Clear_Path();

	Agent* m_Agent;
	IVideoDriver* driver;
	IrrlichtDevice* device;
	ICameraSceneNode* camera;
	ICameraSceneNode* third_person_camera;
	core::stringw irrFilePath;
	IPathPlanner* m_planner;
	MyEventReceiver* receiver;
	array<u32> path_ids;

	vector3df m_start;
	vector3df m_goal;

	std::list<vector3df> m_currentPath;
};


#endif